{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.导入库，读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "oil = pd.read_csv(r'oil.csv')\n",
    "holidays = pd.read_csv(r'holidays_events.csv')\n",
    "sample = pd.read_csv(r'sample_submission.csv')\n",
    "stores = pd.read_csv(r'stores.csv')\n",
    "test = pd.read_csv(r'test.csv')\n",
    "train = pd.read_csv(r'train.csv')\n",
    "transactions = pd.read_csv(r'transactions.csv')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.数据探索和清理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_info(df):\n",
    "  print(\" -- DATA -- \")\n",
    "  print(df.head())\n",
    "  print(\" -- Shape --\")\n",
    "  print(df.shape)\n",
    "  print(\" -- Feature datatypes and non null value details -- \")\n",
    "  print(df.info())\n",
    "  print(\" -- Feature statistical details -- \")\n",
    "  print(df.describe().transpose())\n",
    "  print(\" -- Columns -- \")\n",
    "  print(df.columns)\n",
    "  print(\" -- Null Values -- \")\n",
    "  print(df.isnull().sum())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " -- DATA -- \n",
      "         date  dcoilwtico\n",
      "0  2013-01-01         NaN\n",
      "1  2013-01-02       93.14\n",
      "2  2013-01-03       92.97\n",
      "3  2013-01-04       93.12\n",
      "4  2013-01-07       93.20\n",
      " -- Shape --\n",
      "(1218, 2)\n",
      " -- Feature datatypes and non null value details -- \n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1218 entries, 0 to 1217\n",
      "Data columns (total 2 columns):\n",
      "date          1218 non-null object\n",
      "dcoilwtico    1175 non-null float64\n",
      "dtypes: float64(1), object(1)\n",
      "memory usage: 19.1+ KB\n",
      "None\n",
      " -- Feature statistical details -- \n",
      "             count       mean        std    min     25%    50%    75%     max\n",
      "dcoilwtico  1175.0  67.714366  25.630476  26.19  46.405  53.19  95.66  110.62\n",
      " -- Columns -- \n",
      "Index(['date', 'dcoilwtico'], dtype='object')\n",
      " -- Null Values -- \n",
      "date           0\n",
      "dcoilwtico    43\n",
      "dtype: int64\n"
     ]
    }
   ],
   "source": [
    "get_info(oil)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "oil[\"dcoilwtico\"].fillna(method = \"bfill\", inplace = True)  #仅包含一个要素的缺失值，使用先前的有效观测值插补缺失值\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " -- DATA -- \n",
      "         date     type    locale locale_name                    description  \\\n",
      "0  2012-03-02  Holiday     Local       Manta             Fundacion de Manta   \n",
      "1  2012-04-01  Holiday  Regional    Cotopaxi  Provincializacion de Cotopaxi   \n",
      "2  2012-04-12  Holiday     Local      Cuenca            Fundacion de Cuenca   \n",
      "3  2012-04-14  Holiday     Local    Libertad      Cantonizacion de Libertad   \n",
      "4  2012-04-21  Holiday     Local    Riobamba      Cantonizacion de Riobamba   \n",
      "\n",
      "   transferred  \n",
      "0        False  \n",
      "1        False  \n",
      "2        False  \n",
      "3        False  \n",
      "4        False  \n",
      " -- Shape --\n",
      "(350, 6)\n",
      " -- Feature datatypes and non null value details -- \n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 350 entries, 0 to 349\n",
      "Data columns (total 6 columns):\n",
      "date           350 non-null object\n",
      "type           350 non-null object\n",
      "locale         350 non-null object\n",
      "locale_name    350 non-null object\n",
      "description    350 non-null object\n",
      "transferred    350 non-null bool\n",
      "dtypes: bool(1), object(5)\n",
      "memory usage: 14.1+ KB\n",
      "None\n",
      " -- Feature statistical details -- \n",
      "            count unique         top freq\n",
      "date          350    312  2014-06-25    4\n",
      "type          350      6     Holiday  221\n",
      "locale        350      3    National  174\n",
      "locale_name   350     24     Ecuador  174\n",
      "description   350    103    Carnaval   10\n",
      "transferred   350      2       False  338\n",
      " -- Columns -- \n",
      "Index(['date', 'type', 'locale', 'locale_name', 'description', 'transferred'], dtype='object')\n",
      " -- Null Values -- \n",
      "date           0\n",
      "type           0\n",
      "locale         0\n",
      "locale_name    0\n",
      "description    0\n",
      "transferred    0\n",
      "dtype: int64\n"
     ]
    }
   ],
   "source": [
    "get_info(holidays)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 没有缺失值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " -- DATA -- \n",
      "   store_nbr           city                           state type  cluster\n",
      "0          1          Quito                       Pichincha    D       13\n",
      "1          2          Quito                       Pichincha    D       13\n",
      "2          3          Quito                       Pichincha    D        8\n",
      "3          4          Quito                       Pichincha    D        9\n",
      "4          5  Santo Domingo  Santo Domingo de los Tsachilas    D        4\n",
      " -- Shape --\n",
      "(54, 5)\n",
      " -- Feature datatypes and non null value details -- \n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 54 entries, 0 to 53\n",
      "Data columns (total 5 columns):\n",
      "store_nbr    54 non-null int64\n",
      "city         54 non-null object\n",
      "state        54 non-null object\n",
      "type         54 non-null object\n",
      "cluster      54 non-null int64\n",
      "dtypes: int64(2), object(3)\n",
      "memory usage: 2.2+ KB\n",
      "None\n",
      " -- Feature statistical details -- \n",
      "           count       mean        std  min    25%   50%    75%   max\n",
      "store_nbr   54.0  27.500000  15.732133  1.0  14.25  27.5  40.75  54.0\n",
      "cluster     54.0   8.481481   4.693395  1.0   4.00   8.5  13.00  17.0\n",
      " -- Columns -- \n",
      "Index(['store_nbr', 'city', 'state', 'type', 'cluster'], dtype='object')\n",
      " -- Null Values -- \n",
      "store_nbr    0\n",
      "city         0\n",
      "state        0\n",
      "type         0\n",
      "cluster      0\n",
      "dtype: int64\n"
     ]
    }
   ],
   "source": [
    "get_info(stores)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " -- DATA -- \n",
      "   id        date  store_nbr      family  sales  onpromotion\n",
      "0   0  2013-01-01          1  AUTOMOTIVE    0.0            0\n",
      "1   1  2013-01-01          1   BABY CARE    0.0            0\n",
      "2   2  2013-01-01          1      BEAUTY    0.0            0\n",
      "3   3  2013-01-01          1   BEVERAGES    0.0            0\n",
      "4   4  2013-01-01          1       BOOKS    0.0            0\n",
      " -- Shape --\n",
      "(3000888, 6)\n",
      " -- Feature datatypes and non null value details -- \n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 3000888 entries, 0 to 3000887\n",
      "Data columns (total 6 columns):\n",
      "id             int64\n",
      "date           object\n",
      "store_nbr      int64\n",
      "family         object\n",
      "sales          float64\n",
      "onpromotion    int64\n",
      "dtypes: float64(1), int64(3), object(2)\n",
      "memory usage: 137.4+ MB\n",
      "None\n",
      " -- Feature statistical details -- \n",
      "                 count          mean            std  min        25%  \\\n",
      "id           3000888.0  1.500444e+06  866281.891642  0.0  750221.75   \n",
      "store_nbr    3000888.0  2.750000e+01      15.585787  1.0      14.00   \n",
      "sales        3000888.0  3.577757e+02    1101.997721  0.0       0.00   \n",
      "onpromotion  3000888.0  2.602770e+00      12.218882  0.0       0.00   \n",
      "\n",
      "                   50%           75%        max  \n",
      "id           1500443.5  2.250665e+06  3000887.0  \n",
      "store_nbr         27.5  4.100000e+01       54.0  \n",
      "sales             11.0  1.958473e+02   124717.0  \n",
      "onpromotion        0.0  0.000000e+00      741.0  \n",
      " -- Columns -- \n",
      "Index(['id', 'date', 'store_nbr', 'family', 'sales', 'onpromotion'], dtype='object')\n",
      " -- Null Values -- \n",
      "id             0\n",
      "date           0\n",
      "store_nbr      0\n",
      "family         0\n",
      "sales          0\n",
      "onpromotion    0\n",
      "dtype: int64\n"
     ]
    }
   ],
   "source": [
    "get_info(train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.数据可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "def date_form(df):\n",
    "    df['date'] = pd.to_datetime(df['date'], format = \"%Y-%m-%d\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "date_form(holidays)\n",
    "date_form(oil)\n",
    "date_form(train)\n",
    "date_form(test)\n",
    "date_form(transactions)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlkAAAFNCAYAAAAzV3pXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3Xd4VNXWBvB3hQQIJAQSQg1VqdIEBFFBVOyooCh6FTteu9i56me7dr0CdkWvgg0bdr0WBCkK0kVAitTQe+/Z3x9rtufMZGYyk0zJzLy/58lz+jl7ZgKzssvaYowBEREREUVWWrwLQERERJSMGGQRERERRQGDLCIiIqIoYJBFREREFAUMsoiIiIiigEEWERERURQwyCJKQiJyuYhMjHc5QiUi14nIOhHZKSJ5IZwfk9cnIt1FZIFre5mI9ApwbqaIfCki20Tko2iXLRQiMk5Ero7Svd8SkUeicW+iZMEgiyhEni/YPSKyQ0S2isgvInKtiPDfURmISAaAZwGcYozJMsZs8jneWESMiKTHumzGmAnGmBYhnt4PQG0AecaY86NYLL9E5EEReSfWzw1FNIM9ovKMXw5E4TnLGJMNoBGAJwDcDeCN+BYp4dUGUBnA3HgXpIwaAVhojDno72A8gkQiii8GWUSlYIzZZoz5AkB/AJeJSBsAEJFKIvKMiKzwNH+9IiKZnmM9RaRQRO4RkY2emrGL7T1DvPZ2EVkvImtE5ArXtXki8oWIbBeR3wAc5i6viLQUkR9EZLOILBCRC1zH3hKRF0Xka08t3RQROcx1/AjXtes85a8jIrvdTXsi0klENnhqpuDz/EoiMlREVnt+hnr2NQdgm+O2ishPft7u8a7jO0Wkm+u+z4jIFhFZKiKnu/bniMgbnvdplYg8IiIV/H2Wgcrmft/9Xedzj4cA3A+gv6eMV3maNCeJyBAR2QzgQRFJE5H7RGS553McKSI5nnvYGrsrRGSl53VdKyJHicjvntrTFwI8/zQA97ieP9t1uJGnHDtE5HsRqem67mhPjexWEZktIj2DvMYjRWSG5z4fQANje6yGiHzl+fy3eNYLPMceBdAdwAuesr3g2T/M8zq3i8h0Eele0vtMlHCMMfzhD39C+AGwDEAvP/tXALjOsz4UwBcAcgFkA/gSwOOeYz0BHIQ2jVUCcDyAXQBahHHtwwAyAJwBYDeAGp7jowB8CKAqgDYAVgGY6DlWFcBKAFcASAfQEcBGAEd4jr8FYDOALp7j7wIY5TmWDWANgNuhX6rZALp6jn1jX7dnewiA5wO8dw8DmAygFoB8AL8A+LfnWGMABkB6gGuLHQdwOYADAAYCqADgOgCrAYjn+GcAXvW89loAfgPwz1KUrSeAwpJ+BzzHHgTwjk8ZDwK4yfO+ZgK4EsBiAE0BZAEYDeBtn9f5iue9PgXAXs9rqQWgPoD1AI4P5fmefeMA/AWguef54wA84TlWH8Am6O9SGoCTPdv5fu5dEcByALdCf//6ed7/RzzH8wCcB6CK53fkIwCf+ZTjap97XuK5Lh36+7UWQOV4/zvnD38i+RP3AvCHP4nyE+gL1vMFfS8AgQZNh7mOdQOw1LPe0/OlW9V1/EMA/xfitXvgHWisB3A0NMg4AKCl69hjcIKs/gAm+JT5VQAPeNbfAvC669gZAP70rF8EYGaA96M/gEme9QqeL8kuAc79C8AZru1TASzzrDdG6YKsxa7tKp5z6kCbH/cByHQdvwjA2FKUrSfKFmSt8DlnDIDrXdstPJ9duut11ncd3wSgv2v7EwCDQnm+Z984APe5tq8H8D/P+t3wBHiu498BuMzPvXvAFcR69v0CT5Dl5/wOALb4lONqf+e6ztkCoH1p/33yhz/l8Yd9BIjKrj60Jigf+mU/XUTsMYEGINYWY8wu1/ZyAPVCvHaT8e7vsxtaG5IP/ZJe6XNfqxGAriKy1bUvHcDbru21fu4LAA2gQYg/nwN4RUSaQmtKthljfgtwbj2fMtnXXRZ/l9kYs9vzvmVBawIzAKxxvZdp8H5/ol02y/eZ/p6VDg0MrXWu9T1+trMQnkCfbSMA54vIWa7jGQDG+rlHPQCrjDHGte/v1yEiVaA1macBqOHZnS0iFYwxh/wVSkRuB3C1594GQDUANf2dS5SoGGQRlYGIHAUNsiZCm+D2QJvhVgW4pIaIVHUFWg0B/BHitYFsgNaQNQDwp+u+1koAPxtjTg7zvvbai/wdMMbsFZEPAVwMoCW8gzZfq6Ff6rZze0PPvlCYkk/xshJak1XTBOiEHsGylcS37PZZVkPoZ7cOQEGEn1WSldCarIEhnLsGQH0REVeg1RBOAH47tFauqzFmrYh0ADAT+odCsbJ5+l/dDeAkAHONMUUissV1PlFSYMd3olIQkWoi0hvaF+odY8wcY0wRgOEAhohILc959UXkVJ/LHxKRip4vmt4APgrj2mI8NQWjoR2rq4hIawCXuU75CkBzERkgIhmen6NEpFUIL/UrAHVEZJCng3i2iHR1HR8JbRY7G0Cw9AHvA7hPRPI9Ha/vL+F8tw0AiqD9mEpkjFkD4HsA//F8TmkicpiIHB+FsoXrfQC3ikgTEcmCNut+EGIwWJJ1ABpL6ClF3gFwloicKiIVRKSyp6O/v2DvV2gweLOIpIvIudA+fFY29I+ErSKSC+ABP2Vr6nP+Qehnmy4i90NrsoiSCoMsovB8KSI7oLUA90I7sV/hOn43tGPzZBHZDuBH6F/41lpo35PV0A7m1xpj/gzx2mBuhDYDrYX2sXrTHjDG7IB2or7Q89y1AJ6Edr4PynPtyQDO8ly3CMAJruOToAHQDGPMsiC3egTANAC/A5gDYIZnX4mMMbsBPApgkmcU3NEhXHYptLP2POj7/TGAupEuWyn8F1rjNx7AUmjH9psidG+bAHWTiMwo6WRjzEoA50BHJW6A/k7fCT/fC8aY/QDOhQbUW6D98Ua7ThkK7Vi/EdpH8X8+txgGoJ9n5OFz0L5f3wJYCG123IvAzblECUu8m9iJKFo8w+PfMcaUtVmoXBFNu/CeMeb1eJeFiKg8YZ8sIio1T5+0jtAaESIicmFzIRGVioiMgDZpDvI0KxIRkQubC4mIiIiigDVZRERERFHAIIuIiIgoCspFx/eaNWuaxo0bx7sYRERERCWaPn36RmNMfknnlYsgq3Hjxpg2bVq8i0FERERUIhFZXvJZbC4kIiIiigoGWURERERRwCCLiIiIKArKRZ8sIiIiKpsDBw6gsLAQe/fujXdRkkblypVRUFCAjIyMUl3PIIuIiCgJFBYWIjs7G40bN4aIxLs4Cc8Yg02bNqGwsBBNmjQp1T3YXEhERJQE9u7di7y8PAZYESIiyMvLK1PNIIMsIiKiJMEAK7LK+n4yyCIiIqKoePDBB/HMM8+Edc3q1avRr18/AMC4cePQu3fvkK6bNWsWvvnmm7+3v/jiCzzxxBNhPTvSGGQRERFRuVGvXj18/PHHYV/nG2SdffbZGDx4cCSLFjYGWeTlp5+AffviXQoiIkpUjz76KFq0aIFevXphwYIFAIDFixejV69eaN++PTp27Ii//voLxhjceeedaNOmDdq2bYsPPvgAALBs2TK0adOm2H3btm2LrVu3whiDvLw8jBw5EgAwYMAAfP/997j//vvxwQcfoEOHDvjggw/w1ltv4cYbbwQArFu3Dn379kX79u3Rvn17/PLLLwCAZ599Fm3atEGbNm0wdOjQiL8XDLLobwsXAiedBHh+J4mIiMIyffp0jBo1CjNnzsTo0aMxdepUAMDFF1+MG264AbNnz8Yvv/yCunXrYvTo0Zg1axZmz56NH3/8EXfeeSfWrFkT8N7HHnssJk2ahLlz56Jp06aYMGECAGDy5Mk45phj8PDDD6N///6YNWsW+vfv73XtzTffjOOPPx6zZ8/GjBkzcMQRR2D69Ol48803MWXKFEyePBnDhw/HzJkzI/p+MIVDitu7F8jMBJ5+Gjj+eN03dmx8y0RERGUzaBAwa1Zk79mhA1BSZc+ECRPQt29fVKlSBYA22e3ZswerVq1C3759AWjuKQCYOHEiLrroIlSoUAG1a9fG8ccfj6lTp6Jdu3Z+7929e3eMHz8ejRo1wnXXXYfXXnsNq1atQm5uLrKysoKW66effvq75qtChQrIycnBxIkT0bdvX1StWhUAcO6552LChAk48sgjQ35PSsKarBS3bJkuhwwBtm7V9Y0b41YcIiJKcL4j8owxfs8LtD+QHj16YMKECZgwYQJ69uyJ/Px8fPzxx+jevXupyhnu80uDNVkpbskSXWZnA1u26PqOHfErDxERlV0UuheFpEePHrj88ssxePBgHDx4EF9++SX++c9/oqCgAJ999hn69OmDffv24dChQ+jRowdeffVVXHbZZdi8eTPGjx+Pp59+OmBeqgYNGmDjxo3Yv38/mjZtiuOOOw7PPPMMXnjhBQBAdnY2dgT4AjvppJPw8ssvY9CgQTh06BB27drlVVZjDD799FO8/fbbEX0/WJOV4pYu1WWVKk6QRUREVBodO3ZE//790aFDB5x33nl/1zK9/fbbeO6559CuXTscc8wxWLt2Lfr27Yt27dqhffv2OPHEE/HUU0+hTp06Qe/ftWtXNG/eHIA2H65atQrHHXccAOCEE07AvHnz/u747jZs2DCMHTsWbdu2RadOnTB37lx07NgRl19+Obp06YKuXbvi6quvjmhTIQBILKrLStK5c2czbdq0eBcjJT3yCPB//1d8f9++wKhRQMWKsS8TERGFb/78+WjVqlW8i5F0/L2vIjLdGNO5pGtZk5Xidu70v//TT4Fhw5zmRCIiIgoPg6wkYwzw0EPA8OHOvs8/d5oFfe3aFfhed90FHHZYZMuXin79Ffjyy3iXgoiIYo0d35PMwoXAgw/q+sCBuuzTB6hUSdM1AMCGDcCYMUD//hpkZWYCjRsD8+fHo8TJa/NmYN48wA58KQct80REFEMMspKMO4/b/v3OujuLe48ewJ9/AnXqaHNho0aaT6VSpdiVM9kVFQHt2gGrVjn7DhwAMjLiVyYiSn7GGE4SHUFl7bfO5sIks26ds96rV/F0DBs2aIAFAN99pzVZVatqB/fLLwc++QSYMQM45hjnGtbAhG/ePO8ACwAKCoDdu+NTHiJKfpUrV8amTZtikv8pFRhjsGnTpr+Tp5YGa7KSzNq1zvqECd5B1syZ3n211q8Hpk4F7KCJN990jtWs6azv2AFUqxad8iYrfwld16/XIHbAgNiXh4iSX0FBAQoLC7Fhw4Z4FyVpVK5cGQUFBaW+nkFWkujfH/jwQ6BBA2dfo0beQdaECcC33wJnnw0sXgz897+639+/x+xsZ33jRgZZ4bI5x4YMARYtAnJygMcfB264ATj/fKAMfxgREfmVkZGBJk2axLsY5MLmwiTx4Ye6XLlSl5dcokt3kDV0qE6jc8YZQPXqwe+Xm+us84+i8Nkgq08f4MUXgcceA95+Wz+P88+Pb9mIiCg2GGQloVdeAfLzgeXLtYnKsmkcrrwSqFHD2T94cPF7MMgqGxtkuYPZiy8GmjYNPmnrJZdojRcRESU+BllJpm9f4J//dJoNH35Yl/bLvmpVHeFmt20zlq/DD3fWE3nC6MceA44+OrbPPHQImDMHEPFuZhUBrr4aKCwEtm/3vubEE4HbbgPefRe4557YlpeIiKKDQVaSycrS5TXX6HLmTF22b6/LnBxd2iCrdm3/9/nHP4Dnn9f1RK7JuvdeYMqU6N2/qAg48kjta3XwoO57/31gxAjt15bm8y/MTos1caL3PcaO1f5bVrAksURElBgYZCWZ007TZdWqmpLB6tbN+zw7B2denv/7pKVp4FC5sneTY6IqTeqEAwdKPmflSm3+e+kl4KuvdN+iRbr0mZ8UAHDCCVq79dlnzr7Nm4ufZ4NjIiJKXAyykkStWsCZZ2oNlHXddc76UUfp0iYrbdZMl8Fy1olos+Py5bq9ZAkwaVLkyhxL4TR5btwI9O6tucNGjAh+bs+eznrfvloDtWGD9mmzAa9bpUp6zfDhwIIFus+ddsPifOlERImPQVaS2LkTaNnSe1/z5s66PWZz1NWrp8uSRhk2bepMEt22LXDccdFtfouWUIOsJUt00MDXX+v2vHnBz1+2zHv7m2/0Wfn5ga+5+GJd2hGgo0YVPyeR+8EREZFikJUEDh3S5jB3bivA6X8FFJ/ouVs34I47dCRiME2bak6toiKnye3oo4Hffit7uaNl7FgnlYUVSr+yFSuKv0++HdTdbB+s445z9q1cqc8KFmRdcAEwaJDWVr34IvDDD97HK1b0nhKJiIgSE4OsBHfwIPD007ru24nd3RRo5yW84AJdpqfrde7kpf507w5s2wb861/e+7t2Da3PUqwVFelIvYYNgS++cPaHUjP08ce6rFtX+1c1aVJ8WiI3G7i5m2hvvx0YN06bb4OxCYRvvBHYutX5XACdsJtBFhFR4mOQleC++84JgM48s/jxnj2BCy/U9aIi/52xgzn7bF0+9VTxY3feGd69YmHFCmf9nHOc9ZdeKrnpz/Y9W7hQ38ucnOA1WbfcosvatTUtw7nn6natWpqOIRh3xvdNm7wHILAmi4goOTDISnCLF+tyzBj/tVJjx2pKASB4J/dAqlYFqlRxtm1qCAAYNsxJullePPqo//2//AJ07Bj82kWLgA4dnDQY1ar5D7KM0Zqyjz7S7fbtgfr1tW/V2rU6SfexxwZ/1pVX6rKgQN/DvDxtdrSTdTPIIiJKfAyyEtzy5RoEnXBC9J6xcKETFPj2bcrN1U735cX06d7btnYJAPbtC37t2rUaLFnZ2cDPPztzPForVjh9vv7zH6cfV0ZG4LxjvjIzNWnsunVaw5ibq8/avp1BFhFRsmCQleCWL9eJoEtTSxWq+vU1czqgaQp8rVsXvWeHa+tWHb23YQNw6aXA668HP3/ZMmD2bF3fssV7uiGbrf2qq7yvcXf6d3d6D1eNGk6/trw8zU2WlsYgi4goWTDISnAbN5bcyToSatfWUYwDBmgqB7fylKx061ZNS1Gzpua4qlFDywz4T1dxzjnaRLh8efEgq2JFZ71vXyf9xV9/OfttBvfS2LvXWXfXgDHIIiJKDgyyEpwNKmLBThEzZoz2cbLKS01WUZGOhHQHSgAwcqROgr1rlxMoAdp8+Pvvuj5kSPFrH3jAWf/sMx1pOG4cMGOGBnEHD2oTYWnZAQmAM9oQ0CCrpKZNIiIq/0oMskTkvyKyXkT+cO3LFZEfRGSRZ1nDs19E5DkRWSwiv4tICV2NqaxiGWRZ+fmaZ+uyy3TbXxNiPOzcqYGWv/ejTh1tmtu8WbPez5gBTJ7sHB82TJfuTv5NmnhPnr10qfZ9++gjoHFjoEKFspW3a1dn3d0XjDVZRETJIZSarLcA+E4QMhjAGGNMMwBjPNsAcDqAZp6fawC8HJliUiDxCLKs4cPj89xAPv1Ul741WYAzV+PatcARRwCdOgHjxxc/b9Uq7+0BA4BWrXR96lRnf7t2ZS+vmztxLIMsIqLkUGKQZYwZD8B3CttzANhZ3UYA6OPaP9KoyQCqi0jdSBWWvB06pKPR4hVkZWQADz2k63v2RO6++/eHl+jUGJ3M2k6I7W+EnzvIsmkn7r9fUzG4uVNUAFrDZJOUDhzo7D/llNDLF8y8eRocugcuMMgiIkoOpe2TVdsYswYAPEvb9bo+APeEJoWefcWIyDUiMk1Epm0IZc4TKsbmcIpXkAU4cyBGsvN7gwbaGT1UkyZpslFAp6k5/fTi59T1hPruTuuAd/LSb74B2rQpfq1vIPbtt94Z2suiVSugTx/vfQyyiIiSQ6Q7vvtLJGD87IMx5jVjTGdjTOf8YBO9UUC2RiaeQZatNYpUkFVUpPcqKTu7m23i+/RT4PrrnQ76brYmy3Z0t6680gmiAgV2WVlOvq1zzwVOPjm6KTMYZBERJYf0Ul63TkTqGmPWeJoD7VdsIQB33vECAKvLUkAKzAY2sUjhEIh9diRGGA4bBrzxhrN98KDOsVgSG2x26RL4nOxsTQD64ou6/fHHwEknaYb1nTu1hqtukIbtjz7SZsmydnYPBYMsIqLkUNqarC8AeMaW4TIAn7v2X+oZZXg0gG22WZEirzwEWbYma+1a7Z/l23E8VEVFwKBBwJw5zr5ly0K71gZZ/jq8WyLeIwcbNdIawIwMva5z5+DPSEuLTYAFMMgiIkoWoaRweB/ArwBaiEihiFwF4AkAJ4vIIgAne7YB4BsASwAsBjAcwPVRKXWKWrZMJy62U7rY2qNQp3KJBhvg/fwz8OCDQO/eoV9rjE5wfeiQd1+pt9/Wpc3EHsjOnZr7assWoFIlrakKZtMmZ909IXN5U7GiZqzfti3eJSEiorIIZXThRcaYusaYDGNMgTHmDWPMJmPMScaYZp7lZs+5xhhzgzHmMGNMW2PMtOi/hMhYu9Y7wWZ59N572jl7sCdhhq3JimeXtipVtM/SrFm6bZeh+P574LTTgKeecq77/HOgXz9tJizpXg0aaC4r30ztgdgO8ZdcUrwze3mSmanBY/PmwCefODm8iIgosTDju0evXsCxxwKry2kPsq1bgXvv1XWb3mD9ep1fr3Ll+JUL0NqsP/4o+Txf9r2eM0cDqvR0TY1QubLWNAUbdGqMvicbNmiNXihB1iefaO3Q22/HrumvNE48UZfr12vAOWiQBl1udeqUnySwRETkH4MsaH+guXN13QYyAwcCxx8f3qi5Q4c0m/jKld7Tt0TC/PnOuv3CXb8+vv2xrPo+SToOHiz5mj17dGQfoIHS1KmazsAGjFlZ2hzoz5YtwB13ONtffqkZ6EuSmelM+lye9ekDHHWU976sLM1Wb61bp1P9EBFR+cUgC07HaUBzLm3eDLz+umYEv+660O/z/POaN6phQ71PJC1frsvcXA2ytm4FRo2Kb1Oh1b6993YogenLrrkAfvwR+OEH7/sEC7Jyc4Fnn/Xe55tENJGJeE/nY9kaLnaKJyJKDAyy4AQF9esDixZpsGSNHq3D90Px7bfOug2KIsWOtGvVSoOse+7RbfdovHjxrXUpLCz5mqFDddmrl7Pvkkuc9UBBljuzfOPGzrp7HsBk0KOHLi+4wHl/7UCA8jIhNxERBccgC06QdfjhunzwQe/jl15a8j2M0X5JJ5+s25t9JyLyY/9+YJpraMCXX3qPgHP7809tGqxTR4MsW5sRqLYnls4/X+cDtE2tEyYEP3/fPg3EHnwQeP99Z/+ppzrrgYKshQud9VD6YSWqjAyn/9ihQ87+V18tfZoMIiKKrZQOsr7+GmjZEvjwQ90++mj/54XSPLNwoXbktlOkhBJkjRyptRTPP681VWef7cy/Z9kJjUeM0HOrVgV273aSdH71VcnPibbMTA0wH3kEaNrUeyJlf2yftcaNnVQK117rfU6gIMtdQ7hpE/DmmyWnekhU1appOgd3kHXttcD06c5xIiIqv0qb8T0pDB0KLFjg5Gi64w6tibJNWA88oAk2Qxm9Z9MNdO8O5OSUHGQtWOBMOPz445qRHCje/DdlijPFTLduWouxa5cGX23bat6s8qRu3ZL7ZNn5Ahs21P5HBw8WnwonUJC1caOz3rp18aA0GbmDLAC4+25d1q6tzaf+8oPt2aO/K7Z2loiIYi9la7LGj9cO14AzGq5mTZ1q5ZVXtFbmwQd1uXu3NnEFs8aT175+fe2YHajZzxo1yvvaH37Qdd9Rie6g4swztSZryxatOQo2DUy85Oc7qRfcr2XMGKezun1vbKf9ChWKzwWYlaWBpC977ddfa96wVHDWWd7bu3ZpYLVoEXDkkf6vueIKoFkzYO/e6JePiIj8S9kgyzfRpTs55T//6fQvss1ZJQVNq1dr1vEaNfSaUGqyAE2mCejkxoB2anYHJzaX1I8/6gTGVas6GdJvuCH4M+LBBllFRVo7dd99ur9XL+D22zXHVyjT4GRlaWD7+efe+zdu1Pf59NOTu0+W27//DTzzjLNduTLwj3/o+oIFzvs5ezawZImu26B96dLYlZOIiLylbJC1dKlmK//pJ+CWW3RaGH9skFVS0LRmjdYsiTg1WTNnanNfoPOPO06fDzij5vbt0+YgO4R/9Wqnhg1w+uE0bKh9uMqb/HwNFG2yT99UBPPmafoJQOcODOR6z4RMvklOJ03Sz8S35iuZVaigcy1aOTneTdiLFumyQwfgsMN03Qag7umKiIgotlIyyFqwQPtjNWkCnHCCrrvTAbjl5uqypJqswkLNkWWv2bQJ6NgxcGf6deu0T427Bq11a10+/bSmaDh0SDvEu8+x5SwqCl6eeGnVynvb5r6yweHMmVrzkpHhPWGzr4YNNQhb45pefPlyDbJSpQbLzZ2hvmJF7yDL1opa+/c773eok2wTEVHkpVyQVVSkIwoBnfuuJKE2F/71l46ss9cEqkGYPFlrYebP13QM7g7fPXt6n7txo97H1k4AzjPs1DrljTvXFaBB1e+/O+/jzJlak1W9esm1UXXrevfLsiMpn3sucuVNFLY/HqABaqVKzrGFC72bmJctc/oZ7tgRsyISEZGPlAuyRo501kOZvy5Yc6ExGlQ89JDWZNlgyNZ+WbZ5DPDu8F67ti4ffxxo0wa48Ubv6z78UL8w3UGW7cNlJzsuz2ytW/v2Tt+gSZP0/QilNqpOHadP2vffO+/PCSdEvKjlXsWKTtPyypXFgyz3SMzff3dGqe7eHbsyEhGRt5RI4bBxoybzzMjQUVeW79B4f2zA5NskA+gIxXffdbYDBVnLl2vNTVGRdy2MDTQGD9YfQM/58EPgwguBm2/WfTb7N6D9cebPD9y8WZ74TvCckaE5nnbtCm06oFatgJdeAj74wHn/b7ghtfpjuR11lE4Yfc453hOZL1zo/UfA8OHOuu/E0kREFDspUZM1caLmr7L9oxo10i/wf/+75Gttv6FnntHgxx2YffON97k2yLK1TZYd/fX7797NOjY3lptI8X5cp53mvd2yZWi5u+JlwQIdDekODgFNhwFowOuunQvE5isbONBJoZGKTYWWiE7xdMklxWuyXnjB2bbJStPSGGQREcVTStRkHXusfjnPnKlsoffpAAAgAElEQVRzwTVrFtqXPOBda9K/v6Za6NNHgyX3lDCAc0/bnGUTatrmQt8vvKws/89s1Ej7Z40bBzz1VOLV3DRvrj9dumiNy++/a/6wrCwnkabtWxZMnz5aA9ikiQ4UqFu3eNLSVNWpkw4OaNFC0zW4UzzY/oMFBQyyiIjiKSWCrPx84KabSn/9smXabPXUU5pSoE8f4IkntG9MZqaTfqFWLV1Wq+bMSdi5s85BBxTv1xUoyAK0pm3cuPJdY1WS7GwNAlq00G334IFjjy35ehHgvPOAN97QANmOVCRN/7F8uY6+tKNaAf0j4sMP9b3PyWGQRUQUT6wXCEGjRsCTT2qNyh9/aKfi++7TFA2bNumIwcJC7xqnTp2cZkNbkxVOkGWbFZOp5sb2Vata1WkKLIk7gPDt60bFs/536aJLEWeeSyIiio+UqMmKlMMO09qDkSO1g/oHH2hNVteu/s+3uYoCBVn++mRZ//d/2kTmmxIhkYnoCLnmzUO/plkzZz1YUJrKOnfWmtNdu5yporZv1yCLNVlERPHDICsM9evrHHy//qrNNSVNvpueroGBu7kwLU2H4+/dGzxoqFcPGD06cmUvL8JNv+A+v1+/yJYlWXz7rU4TVaWKZn0HgEsv1QEXJeV3IyKi6EmixqjoKyjQZsFJk0Kvjale3bsmq0YNDb4A1syEoqAA+PJLDSIuvTTepSmfatZ0ml8bNtTfs7fe0jxss2Y5qUCIiCi2GGSFwZ0hPpREpoAGWe6arNxc4KyzdJtBVmh692an93DUqKFNs/b37Pnn41seIqJUxSArDJ07O+t9+oR2TU6Od01Wbi7w5pvA4sXB5+4jKquzzgKOOELXX3opvmUhIkpFDLLCYPu73H8/cMYZoV3jryarUqXQ83QRlZaI9iMEdMJxIiKKLXZ8D0OFCjqqMJzkoDk5muEc0CDL5owiioWzz9Z5H/l7R0QUe6zJClO42ddtx3djdKQXcz1RLF1/vc55mM4/p4iIYo5BVpTl5Ghw9csv2mxo+8gQxYKI5hpbuzbeJSEiSj0MsqKscWNdXnCBLvv2jVtRKEXVqaNBlntyciIiij4GWVE2cKAuV6/WnE92fkOiWKlTR6fX2bkz3iUhIkotDLKiTATIyND1o46Kb1koNdWpo0s2GRIRxRaDrBg4cECX114b33JQamKQRUQUHwyyYqhVq3iXgFIRgywiovhgkBVD9erFuwSUihhkERHFB4OsGGjZUpehzndIFEl5efq7xyCLiCi2mKIwBn77TUd3EcVDWhpQuzaDLCKiWGNNVgxkZ+uXHFG87NsH/Pe/wOTJ8S4JEVHqYJBFlAL+9S9d/ve/8S0HEVEqYZBFlAJuvx1o2pTN1kREscQgiyhFZGYCe/bEuxRERKmDQRZRimCQRUQUWwyyiFIEgywiothikEWUIjIz2SeLiCiWGGQRpQhbk3XwIDB3brxLQ0SU/BhkEaUIG2QNHAi0aQNs2BDvEhERJTdmfCdKEVWqAIsX6w8A1KoFGBPfMhERJTPWZBGliMzM4vtmzQLWr499WYiIUgGDLKIU4S/IOvJI4OijY18WIqJUwCCLKEWkezoHnHWW9/6lS2NfFiKiVMA+WUQpYsAA7YN1/vnAl1/GuzRERMmvTDVZInKriMwVkT9E5H0RqSwiTURkiogsEpEPRKRipApLRKXXujXwxBNA/frFjx06FPvyEBElu1IHWSJSH8DNADobY9oAqADgQgBPAhhijGkGYAuAqyJRUCKKjOxsZ/2993Q5Y0Z8ykJElMzK2icrHUCmiKQDqAJgDYATAXzsOT4CQJ8yPoOIIqhKFV1efDHQs6eu//JL3IpDRJS0St0nyxizSkSeAbACwB4A3wOYDmCrMeag57RCAH4aJ4goXkSALVuArCwgLU07xK9bF+9SEREln7I0F9YAcA6AJgDqAagK4HQ/p/pNdygi14jINBGZtoGpp4liqnp1Da7S0oCaNZn9nYgoGsrSXNgLwFJjzAZjzAEAowEcA6C6p/kQAAoArPZ3sTHmNWNMZ2NM5/z8/DIUg4jKolYtJiQlIoqGsgRZKwAcLSJVREQAnARgHoCxAPp5zrkMwOdlKyIRRVOtWqzJIiKKhlIHWcaYKdAO7jMAzPHc6zUAdwO4TUQWA8gD8EYEyklEUZKfD/z6q/bVGjYs3qUhIkoeZRpdaIx5wBjT0hjTxhgzwBizzxizxBjTxRhzuDHmfGPMvkgVlogir1YtZ33QoPiVg4go2XBaHaIUV7Om9/auXfEpBxFRsmGQRZTiKlTw3n7kkfiUg4go2TDIIkpxRUXe28uXx6ccRETJhkEWUYo74wxd/vSTzm+4bFlci0NElDRKnfGdiJLDkUcCxpMyuEULYPFiXf/8cyA3F+jePX5lIyJKZAyyiOhvWVnAzp263scz66jxO2cDERGVhM2FRPS3rCxg6VLg9dedfQyyiIhKh0EWEf0tK0uXAwc6+9asiU9ZiIgSHYMsIvqbbzoHAFi3LvblICJKBgyyiOhve/cW38d5DYmISodBFhH9zV+QtX597MtBRJQMGGQR0d/27NFlTo6T+Z01WUREpcMgi4j+duedQNOmwKJFwD33aEf4WbPiXSoiosTEPFlE9LcjjgD++svZ7tsX+Prr+JWHiCiRsSaLiALKz/ffT4uIiErGIIuIAkpPBw4ciHcpiIgSE4MsIgooIwM4eDDepSAiSkwMsogooIwMoKhIf4iIKDwMsogooHTP0Bg2GRIRhY9BFhEFlJGhSzYZEhGFj0EWEQVkgyzWZBERhY9BFhEFxOZCIqLSY5BFRAGxuZCIqPQYZBFRQGwuJCIqPQZZRBQQgywiotJjkEVEAdk+WWwuJCIKH4MsIgrI1mS98AITkhIRhYtBFhEF5A6yPvssvmUhIko0DLKIKCDbXAgAGzfGrxxERImIQRYRBWRrsgBg//74lYOIKBExyCKigBhkERGVHoMsIgrI3Vz40EOAMfErCxFRomGQRUQBuWuytm8Hli2LW1GIiBIOgywiCsgdZAHAuHFxKQYRUUJikEVEAbmDrCpVgNmz41cWIqJEwyCLiAJy98lq3RqYOzd+ZSEiSjTpJZ9CRKmqUSPgqKOA004DFi8GpkyJd4mIiBIHgywiCigrC/jtN12/7jpgx474loeIKJGwuZCIQpKdzSCLiCgcDLKIKCTZ2cDevcCBA/EuCRFRYmCQRUQhqVZNl6zNIiIKDYMsIgpJdrYu16+PbzmIiBIFgywiCokNstq2jW85iIgSBYMsIgrJoUO6PHgwvuUgIkoUDLKIKCRt2sS7BEREiYVBFhGFpE0b4NxzgVat4l0SIqLEwCCLiEKWkwNs3x7vUhARJQYGWUQUMiYkJSIKHYMsIgpZtWrAzp2AMfEuSeQtXx7vEhBRsmGQRUQhy84GioqA3bvjXZLI6NkTaN8e+PVXoHFjYORI3b9nDzBnTjxLRkTJoExBlohUF5GPReRPEZkvIt1EJFdEfhCRRZ5ljUgVlojiKydHl1u2xLccobr1VuDUU4Fp0/yX+eefgd9/BxYt0u1Ro3R51VVAu3bAtm2xKysRJZ+y1mQNA/A/Y0xLAO0BzAcwGMAYY0wzAGM820SUBBo10uXSpfEtR6iGDgW+/x446iigbl3vY0VFzrrNYr9iBTB3LvD++7q9ZElsyklEyanUQZaIVAPQA8AbAGCM2W+M2QrgHAAjPKeNANCnrIUkovKhWTNdLlwY33KEYutW7+19+4B164BrrgFmzACee845Zl/P3Lne+cD++iv65SSi5FWWmqymADYAeFNEZorI6yJSFUBtY8waAPAsa/m7WESuEZFpIjJtw4YNZSgGEcVKo0ZAhQqJUcPjLxB8/nlg+HDgs8+AP/909v/+u/97zJoVnbIRUWooS5CVDqAjgJeNMUcC2IUwmgaNMa8ZYzobYzrn5+eXoRhEFCvp6UBuLrB5c7xLEtx33wFduxbf/+ijulyzxjvf159/As2b+z//kks4lRARlU5ZgqxCAIXGmCme7Y+hQdc6EakLAJ7l+rIVkYjKk0QIssaPL75vyBBn3TfI2rZNg6znnwemTwfGjgW++UaPvfsua7SIqHTSS3uhMWatiKwUkRbGmAUATgIwz/NzGYAnPMvPI1JSIioXEiHI8k0xcdxxwDHHONurVwNZWdr8afNj7d0L3Hijc447CEvGvGBEFH2lDrI8bgLwrohUBLAEwBXQ2rEPReQqACsAnF/GZxBROZKbqzVB5dmSJUD9+sBbbwFHHKEjC22aBkDLX7s2cPjhTpC1aZP3PapVc9Y5lRARlUaZgixjzCwAnf0cOqks9yWi8is3V0fhlWerV2ueq169nH01XBn71q8HKlbUc6y0IJ0nGGQRUWkw4zsRhSURmgvXrAHq1PHeV726s15UpDmx3LVVNjeW2+LFumRSUiIqjbI2FxJRisnN1ZqdAweAjIx4l6a4oiLNh+UbZKX7+d/u8MOBQ4cAEf3xZWu/WJNFRKXBmiwiCkturi43btSf8mbTJk254Jvh3bLBV/PmwPXXazOhvwAL0LkaAU1eSkQULgZZRBQWG2RddBGQnw/ceWd8ywNo5/Xhw7UWa9w43edbkwXoxM8rV+q0QHPmaL+sYGxN3YgRwc8jIvKHQRYRhcUGWT//rMtnnolfWaxjjtHpcipXBi64QPf5q8mqXFmbDRs3LjnAsq66SpdM40BE4WKQRURhsUGW25YtsS+H2+rVujxwwNnnryarNJo00SWzvhNRuBhkEVFYGjcuvm/p0pgXo0SRCrIqV9blnj2RuR8RpQ4GWUQUllq1ik8zE88gK1AzXlZWZO5vg6y9eyNzPyJKHQyyiChstWt7b8czyLLBz+OPa5LRPXuAVasid38GWURUWgyyiChs7sSeOTnAm2/Gryw7d+oyO1tHO1auDNSrF7n7Z2bqkkEWJQN3v0WKPgZZRBQ2W7sDADVrAvPm6XyB8bBjhy4j1TzoizVZlCx+/FFH1fo291P0MMgiolJr1Qp46SVdP+yw2KY52LIFeO212AVZ7PhO8bRgAfDPf2rN7e+/A088EfjcSZM0d5wx2nR+6BDwv/8BJ5+sx488Epg6NTblTnUMsoioVFauBKZM0alprBUrwrvHjh3AW29pX6pwXX65fun8+qtu2+zskcaaLCoP3npL/6g4+migfXvgX/9ymsrdDhwAjjtORwGPGAEUFOi5zz3nnFO5MnD11bEqeWpjkEVEpVJQoIFNgwbOvunTw7vHyJHAFVcE/6s8kL/+0qWdvJnNhZTM7O/53LnOPt+J2hcuBJ5/3tkeMkSXTz8NfPutrt90E3DjjVob9soroT17xAigbdvymaqlvGOQRURlkpHhZH+fNi34udu26ZyBr7+u0/H88YfuX7cu/Ofa5ru1a3VpJ3OONHfH96VLtVl04cLoPIsI0OmhbrkF+OUX3TYGGDOm+Hl33gn897+6fvAgcMMNwO23O8d//937/IULtUarUSPdvu46bYYMxhitNf7jD+C000r1clIagywiKrMePfQvXZtGIZDx44FFi4CBA3U6HtsvZM2a8J9pg6xFi3RZv3749wiFrcl64gmgaVPt4D98eHSeRQQAn3+uwdBDD+n2lCn+A/sPP9Rpn7Zs0RG1P/7oHOva1Vlv107/nTRrptsVKjjHvvsueFnc6VAWLgQ++ii815LqGGQRUUT07q3LxYsDn1NU5L09b54uSxNk2aaSRYu0qbBatfDvEQo7jdDkycX3EUWDrYHKywM+/VSDKQB4+23/5+fmAhs2ONv33w+ccYau9+gBzJ7t3XfygguAM8/U9WXLgpdlzhxdDh+u3QMuvxzYvz+cV5PaGGQRUUScc44ut24NfI7v6ENbG1VYGN7IxL/+Avbt0/WFC6NXiwVo4tV33vHeZ0c0EkWaMTqoBADefx8491ztW1WjBnDhhcDdd3v3u/L1zDNaA9azp27fdlvxc/LygK++0knUS/pd/u03IC0NOP984Mkngd27gU2bSvXSUhKDLCKKiJwcXdoOuv741mQB2syxc6dTM7VjBzB6dODri4qK//XduXPYxQ1Lv37Oeq1apRsNSaljzx7g3nuBXbvCu+7447XPnx3U4XbxxUB6ujZbDxzo7L/3Xmd9yRLg5pt1vUcPLYf948ef7Gz/IxTdfvoJ6NhR/33n5ek+3w73FBiDLCKKCJsFPlhNlr8g65hjdGlHLt12G3Deef5HKrZurUGO71/fF14YfnnDUakScM892mxTr57WvFF8ffaZk76jvHn5ZeCxx4Bhw0K/Zt067bO4dCkwblzx47Z/FqC/j9ZRRznrTZroQBTLnTTYn6ys4DVZu3bpe3zCCbptg6xQarKWLWOzIsAgi4giJJSaLH9pEI4+Wpc2Y7wNtvyNelqwQP+D9/3ru23b8MpaGo8+qk0m3bppZ2HfkVsUW337OgF6eWGMJv60v5/hNCv/9pv//Y88Avz5Z+B+gB066PLWW0N/lpWdHbyMQ4dq3q1TT9VtW4aSarIWLdKAz/b7SmUMsogoIipX1r+igwVZu3cX33fkkbq0wZX969umd/DH94uhYcPQy1lWAwbosn37kjsNU3S4a1L81Y7Gw9Kl2qyWnu4k5X3iCafvYElWr/beHjIE6N5d+2S1aFH8/F699FmNGukfKP/5T/hlDhZkLVsG3Hcf0KULcOKJui/Umqw33tCle7RjqmKQRUQRIaJNhsGaC/1NTdOggc5/+Pnn2iRnv6CCJT6cONFZP+YYfXasdOvmrP/737F7LjncAbhvcBIPe/Zoeg87J6ANMgCdziYU7tGBgI4AHD9ep67y57vvnH9PTZqU7t9AsD5Zxx2ny/x85961agFVqpT8mmzi05KaK8MxeTIwalTk7hcrDLKIKGJycsKvycrJ0S+JX3/VPFt2yPioUd7Zrd3ee0+Xq1b5778SbVdeqcuqVaP3jFjOA5lo3PPu+ab/mD9fA/ZYCjbh8jffhNY3af16p18joCP/gklL05qssghUk7Vvn5Mf64EHnP12Op6vvtJmRH8OHnRSs+zdG7l+Wd26ARddFJl7xRKDLCKKmNLUZOXkAMce6/98d14gf0FHvXreHX1j5ZVXtPbNZpuPtK1btWnm5Zejc/9EZYN098wCa9boF/maNdp02Lo10KdPbMs1c6azPmqU/rGwdKmO8HvtNR0xWJL167Wm6N57gdNPj03tbI0a2r/Kt8nV9od8/33vjvWABjt79wZuzl+6VAOtjh11OycH+OCDspXTHaiJ6MCY0jSPxgODLCKKmNLUZFWq5CQytb78UpcVKzr7/AVo8ZKRoX2ybD6jUDzzjP+h+f589plm8X7zzdKVLxm9/77WHF5/vX5p2w7fq1bpVDL16nlnMg83fUJZ/PWXfvnPmqWDIwYP1gmaO3XS46GMRt24UQP3Rx7R2q9YaNJEAxjfJlcbZPlrquzSRZcdO+prnjDB+7it1bPn7d0L/PBD2crprrkENMXLHXeU7Z6xwiCLiCKmenWdb83dZ8otUIdZ91/6NWpo0FWnjndN0fbtkStnJDRooEFWYSEwY0bwczdv1nnm7CitktgvvWgmWU0ke/YA//iHrtvavUaNNOj64gtg7Nji19SpE5uyHTgAPPus/j60b6/NeJY7SCkp6Nu9O7rNz/40aaJLO7LXsv0iGzcOfI3l7pc4dar2JatbVzvtW+6peUrjp5/87589u2z3jQUGWUQUcd27ay3MLbd412y5+88MGOBM9VFQ4Oy3tRG+QZZvDZnvX7ex1rChBkNnn601FsG+SGz/lWBNqdbevU6CyUD9XlKNHQRx5ZVO7V7Llpr9/H//89+0VlKSTX8OHABefDG8gN5fgGe5U0wEG8gBaCAZyY7iobD//hYs0Jo0m2JlxQrtr2XTsriJaMb5O+/Ubfe/6Ztu0uX553v/7i5fXrZyfv211ozt3w9MmuRMgt2pk46AvPXW4J9DXBlj4v7TqVMnQ0SJr317Y7T3lPNz6aXO8XbtdF/r1sWvrVRJj9WurdvnnGNMw4bGHDqk2xMmeN934cLov55ghg/3Ls+oUYHPXbpUz8nLK/m+n37q3LN794gVNyG9+aa+Z7Vr6/vx66+6/7ffjNmzx3lfAWNatCj+uxeuhx/W6557LvRrXnpJrxk/3v/xjz/W4z/9VPxYUZExv/yiyxYtjLnggvDLXBaHDhmTk+O8Xx066P4+fYw54oiSr7/pJmOys7X8xhhz7LF6ny1bjNm1y5gbbjCmf3/dd+utxsyfH34Z9+83JiPDmLvucvYVFuo9Gzf2/rwPHgz//qUFYJoJIb5hTRYRRYy/fFUjRzojANesAa65xv+owT//1KVtbunXT/+itpnffYe4+/srO5Zsfi8r2CTXti9aKCMG3SPGAtWoPPoo8MknJd8r0b34ojYxr1un282b6/Koo7TWp3Fjp/mqWTPva0sz8s7Wju7fH/roztGjtV9hoMEbtlz+mspHjtTark8+0ZqszMzwy1wWaWne5Z41S5vAV64MLfdco0Y6OnHiRK3JnTRJJ5CuXl1TPbzwgpOpfsgQoF278Mu4cKHWirkTDtevD1xxRfGRi2VtlowGBllEFDFvvaVfHL5OOEG/tDZt0rw7/mRl6dJmgLfzEdrgy3YGPvtsXbqHu8dDp076RWIFy9cUTqd9d5Pitm3+v+zvu897PsVk9ddfznv82GP+s57bfk/uvkIVKugIt0WLwnuebWK84w4NeD7+WLdtk6Rvk9+qVZpws3Zt775YbjVr6tJfkGXzSa1dG58gC9DcdG6TJun7HkqQ1bSpLgcN0lGUAHDGGd7ntGjhdAcoTfO3/Qx9O+Hb5nq3Ro004355wiCLiCImNzfwhLT79ulQ8UCde2vW1L+IbZDWtKl+WS5cqP9xvv667n//fe1I7h55GC/VqjnrwYIsf6MqAU0F4Tvi0AZZ55+vNVmVK+u6VV4ynEfbnj06wvKee/SLf/Bg/+fZ4Nzd0d1++TdvHt6Xrrs2ct8+J7AfMUKXv/zifb6dO3H48MD3tFnSN24sfsx+1lu2xC/I6trVe/uii5wUIiWx0+bUqaN9oo46yvt31Xr8cV3WqhVe2T7/XJOQAsXzhl12mf9rKlcuX+kdGGQRUUTZLz1fNtBw1/74OvZY5/qKFbVZYMUK76bCKlV0BGJ58Nln+p99167Bc2bZmqzNm50RUdu3A9ddp52P3bVXdr1NGz1//36nRgXQL+RUYKcsqls3eFZ/G3TWru3ss0EWADz3HPD99yU/z5jizU1TpujSNj0ePOh9fM4cLVfPnoHvW6mS/k7bEXtuNhHo889rLVqsO74D+tpGjSo+IXugTPNuFSvqa9+xQz+v1q39n3fJJcApp3h/RiXZtUvznT35pL7HvjXg7prLr75yAtSDB+Nfy+3GIIuIIspfs0l2dmhBlq8aNTTosLVEwWoM4qFrV20irVUr+Hxu7uZCm9/JPVrSHTRu3arv0cUX+7+XuzkmmbPC2y/skjKf2yDLHdzbJmcAuO220FJnfPGFBgvuka7z5+vnZIMs3xGLW7fq73ZJtarHHaeJdX2by2ztlv0jIh41WQDQv7/mvdqwQSeqnjvXSZlRkho1NFfWypWaqyyQunX1vZw0qeTUC+vXewdk1av7Tzr82msawJ1xhgbTlvszjDcGWUQUVTfdpIGXDTTCDbK2bHGCrNJ0nI2FvDz/zUGWb3Phvn3FO7XbWo2NG/V1H3aY08/FKirSL0ErlJQQiWLmTCcJprvZzl8/LDcbaKalObVdffoA77zjfV5JzawTJ2qtk7vflTHaGdymFbnxRm1+PHRIc2OtXBnaAIxzz9Xff9/BERs36jQ1NkiLV5Bl1aypTX6tWwfuY+bLXfsWqL8loO/TihUacLqDYECDT3dKlhEjvPOKBerTOHCgBq8i3pnpGzQIreyxwCCLiCLO1swsWaL/cW/bplOMAOEFWXaaHvvlFKsEk+GqWVOTki5c6P+475dE5cqa28fNfrnPnaudhQH9EnnwQV3/+WfgpZe8r/FNIpmoDh3SmpSWLXXdBlunnVZ8Whdf//kP0Lev1mbY34/s7OIdtw8/PHjN39y52kSWnq41Le4Rse4gef16HVF4++3Ap5+GFmTZmhXbHLlwoTaNb96sTeL2j4d4B1mlYZt1geAd291NeDYfl3X//ZoHy07V4/5DAgite0D79k4fMdZkEVFSW7gQ+PBD7TfRpo3us32WShNk2aY4O1KrvLG1JL5/oVvuIMtOteI71Uj79rrvjz+cJkVAawLT0/Wv+wULtNbDNrcsXhyZ8sebOzhdvdqpuRwypOQalSZNNOipWlU7ql90kY4y8/1iXro0+PQ2CxZokAdo0GN/b9et8+4HV1joPWoxlPkrbeZ+G2R9+63Tib5BAycgLG8j40JhA8NzztE/CgI56SSnyc+3Cdj2fbv8cuBf/wLGjAEuvFD/3Z94ojPNVkk++kj7lrkHpMQbgywiiriaNZ1RRnYOM6s0zYWbN2vtTzjXxpLtD2TL6svWhGRkaJ6wQE45Rf/Kb9/e2ZebqxMGjx2rNYJ16zqZusNNUVBeuScbXrbMCbKC9fHxp0MH4L33NCj1Nzruvff8X1dUpMGTu/arRg29z7p1wLx5ztRPq1Z5B2vBmokt23w1e7Z24rcDGTIzNRXHlVfqdnZ2yfcqb0aO1KbZzz4LXuPUo4fWAv7rX7p0N9/aJsfp04EnntB/R/366e/+mDHOHyYlycx0JqYuLxhkEVFU+Vbdh1uTtXOnNt2U1DcnngYPBs46S9fz8oBp07yP2/5We/eGVhvnrskCtGPysmU6vUi1avoe1q+fPDVZ7pqi5cv1dVWtWragw1+H+cGDnaZItw0bdBSnuy9PWpoOaHj8ce1LdMEFur+wMHi6Dn9sH7tHHtG0D3Zuzw0btLnxzDN1pOKAAeHdtzyoXz/wIBwZoNUAABMtSURBVA1f1atrh/ZDh5w0C7t362t3y8gonm8rUTHIIqKoGz3aWQ8nyGrUSJdTp4b/xRZLmZk6DN9y18wAGmRlZekXd0n9S04+ufjw+ZNO0uXmzU7gcfjhOvotGUYY2iAU0EDj1Vf1dQZK2xCquXP1C9s9ifG8ecXPs+kVfDtM2xFuGRmacDMjQ2uy3E2ENjluSXybktPTvf8ttGlTuiz1icb2sbvrLg0yv/hCA9dPPnFGCDZokJj90/xhkEVEUde3r7Mezn+etgN4InA3NdnRaNaOHU5w5DsU3RgNQi+/XPNmff998XNq13aaJG1/k1attIPwKadE7CXEjQ2y3E184WTJD6R1a62huu8+HQkI+K/9swMI3LmXAOczu/9+rdWqV08DAjsQo0sX7xxmwdimT/vZVqhQ9iAyEXXr5qTU+PFH/bFJjG1+M/f/F4kuBeJmIioP7r9faxHCGfnjDrJsc0155f7C9M2Z5Q6yunXTkWmLFjmjofr2Df7FIqLZy2fMcO7Tq5dmjP/xx8i9hnjZsUObB92BVWmmYAmmoEADJd9aRsDpeO87/+G+fbq0wdfy5foDaE3Mk0+G/vxBgzR7ee/ewN13O/dONSJae1W1qn4Wf/6pAw0qVNDg6+efNc1DsmBNFhHFxEMP6eifcJpE3E1rH3wQ+TJFmv0Ct7UmljvIqlABeOYZnTIkWCd4X7YzvL1P374aNGRkJH6T4fbt+rrco9Oi0Qm8e3cdQOBr0SL/TVR2AmLbjOhOJ1FSaglf9eoB48cHnkg6lVSsqM3d8+bpe28HcqSnawf5UHN0JYIkeilElIxefbV4Tqny6ogjdPnss965ldxBVmnZL3XbjyctTWtEDhxI3Kl29u7V4OP11/X9efZZHXX28MPFU1xEQrduGgC7R4AOGaKjDm2aBbfGjXVp+2b9/LNzrFev0pXB5sTyN8dfKmndWmth16/XWtpkxeZCIirXwqntKQ9OPRX47jsdQdapk/Yz2rGjeHLMcA0YoLVWdhQj4AwMWL68fI++DOSnn5z+TdnZTg3G//1fdJ5nmwMXL9b+VEVFOu0O4H/U5xtvaDO1bbbOzARuuUWTnpZ2frzsbA2MU2Wi70Bat3YGxJx7bnzLEk2sySIiiiDbT+fUU50v5507y16TlZWlU7C453RzB1mJyD10P9DE4pFkm6X+/FOX7onH/QU9NWpoUky3oUM1FURZpKeXPN9hsrNzU3bo4OQgS0YMsoiIIsjd9GE7wO/aFZ1EqjbIsikIEsW55wLDhnkn8ozFkP1mzbR/1dChmqvp11+dY75zSVJ09emjTbVffx3vkkQXgywiogjKzCzeuXrPnugEETVrarbsW24p33nE3IqKdM6/QYO0P44ViyArIwN49FGdjPqdd4Brr/U+RrGTmam/A+Fm9U80DLKIiCKsZ0/tS2abwPbsiU5Nlogz2e7VV+ty9uzyMdqwsFDL5zvZr7vT+ciR2letUyfNhh4Lp5+uy8sv1ylz8vJ0Eu4334zN8ym1lDnIEpEKIjJTRL7ybDcRkSkiskhEPhCRFG95JqJU1LCh9sUaP15TAUS7pmbdOs2a3aED8O672jds0KDoPjMY2ww0fLj3fnftFaDNq9OmOSMzo823g/v11wMPPOA0vRJFUiRqsm4BMN+1/SSAIcaYZgC2ALgqAs8gIkoodqScrTmJdpA1Y4Yzfcydd2rn7GHDovvMYHbu1KVvh3bfICuUuRwjzZ1EtKyjPomCKVOQJSIFAM4E8LpnWwCcCMBONDACQJ+yPIOIKBFd5fnz0ubLilaQ9fPPQMuWuj57ti7dc+tFYnqacB06pEkmgeJBlk3ZkJ+vy3jUIJ13nrPOIIuiqaw1WUMB3AXADn7NA7DVGHPQs10IwE+KNyKi5Farlma5t6LRJwvQDNnz5wMnnqjbvXoBZ5zhHF+6NDrPDebf/9YkskDxDuVz5mgKAzthsr8koNFWp46zziCLoqnUQZaI9Aaw3hgz3b3bz6l+u2CKyDUiMk1Epm1wJyshIkoS7mmBot1caLOTFxRoh3Jr3broPtefMWOcdXfme0BH9h1xhJPBPhb5sXxVreqs2ylziKKhLDVZxwI4W0SWARgFbSYcCqC6iNhM8gUA/A4sNsa8ZozpbIzpnG/rjYmIkog7K3isgqxq1XTE3IwZur11a3SfG6wsgNM3y1q7VgObu+4CnnsOuOSSmBbtbzbIcwdcRJFW6iDLGPMvY0yBMaYxgAsB/GSMuRjAWAD9PKddBuDzMpeSiCgBxTLIGjAA6NgROOUU3c7J0eW2bdF9rj8HDugyL08Tsbpt26Zlq1QJuOmm+OWnGjfO6R9GFC3RmLvwbgCjROQRADMBvBGFZxARlXvuICvac9U1bgxMd3XesM+OdZA1ebImRj36aH22b02WDbLirUqV6PWTI7IiEmQZY8YBGOdZXwKgSyTuS0SUyNy1V7Hu4F2tmi5j2Vw4fz7QrZuun3kmcPCgM7UQoElSy0uQRRQLzPhORBQlduLbkSOB9u1j++z0dO1v5K8mq6gIeP11J1t8JIwZA7z4orOdl6eZ78eO1Vxhxmgn+EOHGGRR6ohGcyEREUFHF8Zzipvq1YHly733zZ4NnHaadkBfvBh44onIPKtXL+/tvDy99//+pz9btjhT/9haNqJkx5osIqIk1bu3Tsb87rtAly7aP+rMM51kpZ98Er1n5+UBFSo4WeiXLNGyAPEZ8UgUDwyyiIiS1COP6Ci+Sy4Bpk7VH3ferMWLgaefjs6z8/J02bSpLrt3d9Im2BotomTHIIuIKEnVrOmd/f3AAe2M7nbPPcC+fWV7jvueNgFr5cq6bNECqFdP+39NnaqjDpkakVIFgywioiTm7nBv5za0unXTAGnBgrI9wzb/tWsH3Hyzrotn/o9KlYAJE5xzmfyTUgk7vhMRJTH3BMx2ups779S+Wbm5GhjNnavL0rJpGu66C+jXT+/7j384x2vXdtYZZFEqYZBFRJTEbN8oQCdnBoDrrgOaNHFqoGxH+NKy/bxq1dKaK1ubZVWtqj+7dsVnrkKieGFzIRFREjvjDGD4cJ0vcLVnJllbs1StGpCWBmzeXLZnrFqly2AJV+vU0SVrsiiVMMgiIkpiaWk6mu/UU519djqZtDRt2otFkGUnjWaQRamEQRYRUQoYOND//txc76lvwrV9u/bxqlgxeJJR2zeMQRalEvbJIiJKAV26AK++WjxdQ1lrst5+W5e33eaMKPTHpm3o0KH0zyJKNAyyiIhSxDXXFN+XlwcUFvo//8ABDcqCdVYvLAQyMoDHHgv+7LvuAjp3Bs47L/TyEiU6NhcSEaWwI44A5s/3n5D0hBOA7Ozg169fr6MKg9ViAVpj1q9fyecRJRMGWUREKaxrV2D/fm1KdCsqAiZN0vVgk1zbIIuIimOQRUSUws4+W6ffsYlKreXLnfXduwNfv369d7JRInIwyCIiSmHp6Tr1zsaN3vvnz3fWly4NfP3q1QyyiAJhkEVElOLy84ENG5zt2bOBt95yttu2BebNK37dvn2aI6tJk6gXkSghMcgiIkpxNWt6B1kdOgAffeR9zg8/eG9//TXQo4f212raNPplJEpETOFARJTi8vN1HsMDBzQdgz+LF3tv9+7trDdvHr2yESUy1mQREaW4unV1WbGiM6LQ19y5/vdnZmqiUyIqjkEWEVGKO/xwZ/3jj511dxLSGTO0adAY4L77nP2h5MgiSlVsLiQiSnHuIKtmTWf94EFnfds2nX5nxQrg0Ued/XayaSIqjjVZREQprn59oG9fXd++3dm/d6/3ecuWacoGtwceiGrRiBIaa7KIiFJcWhowejRQUKApGQJZtsw7CPv+e+Dkk6NePKKExZosIiICoKMMlyxxtqtX1+bB2bN1e84c4OWXneMFBbEtH1GiYZBFREQAgAYNgD/+0PXbb9egqkEDnUQ6LQ146CFg6lQ9vnQp0KpV/MpKlAgYZBEREQCgWTNgxw5d79bNqamqUAHIzXXOu+YaoHHjmBePKOEwyCIiIgDeSUWrVfM+lp+vy8xM4NVXY1cmokTGIIuIiAAAF1zgrAcKsqpWjV15iBIdgywiIgIA1KjhrGdnex+zk0BXrhy78hAlOgZZRERUjG9N1lln6bKwMPZlIUpUDLKIiKgY35qsli3jUw6iRMYgi4iIinHPWwhoVngiCg8zvhMR0d8mTgS++ELTNrjl5MSnPESJjEEWERH97dhj9ceXiC47dIhteYgSGYMsIiIKybZtQMWK8S4FUeJgkEVERCHxHXFIRMGx4zsRERFRFDDIIiIiIooCBllEREREUcAgi4iIiCgKGGQRERERRQGDLCIiIqIoYJBFREREFAUMsoiIiIiigEEWERERURQwyCIiIiKKAjHGxLsMEJEdABZE+TE1AWyM8jOsHADbkvBZsX4eP7PEex4/s8R6FsDPLBGfx88s/s9qYYzJLvEsY0zcfwBMS4ZnuJ71WjI+Kw6vjZ9Zgj2Pn1liPYufWWI+j59Z/J8V6mfA5sLo+DJJnxWP58UKP7PEk6yfWbJ+XkByv4/J+rkl62cWk2eVl+bCacaYzon+DIosfmaJh59Z4uFnlnj4mcVfqJ9BeanJei1JnkGRxc8s8fAzSzz8zBIPP7P4C+kzKBc1WURERETJprzUZBEREREllYQOskSkgYiMFZH5IjJXRG7x7M8VkR9EZJFnWcOzv6WI/Coi+0TkDtd9KovIbyIy23Ofh+L1mpJZpD4v1/0qiMhMEfkq1q8lVUTyMxORZSIyR0Rmici0eLyeVBDhz6y6iHwsIn967tctHq8p2UXwu6yF59+X/dkuIoPi9boowZsLRaQugLrGmBkikg1gOoA+AC4HsNkY84SIDAZQwxhzt4jUAtDIc84WY8wznvsIgKrGmJ0ikgFgIoBbjDGT4/CyklakPi/X/W4D0BlANWNM71i+llQRyc9MRJYB6GyMiVV+n5QU4c9sBIAJxpjXRaQigCrGmK2xfk3JLtL/N3ruWQHAKgBdjTHLY/VayFtC12QZY9YYY2Z41ncAmA+gPoBzAIzwnDYC+osIY8x6Y8xUAAd87mOMMTs9mxmen8SNPsupSH1eACAiBQDOBPB6DIqesiL5mVFsROozE5FqAHoAeMNz3n4GWNERpX9nJwH4iwFWfCV0kOUmIo0BHAlgCoDaxpg1gP7yAqgVwvUVRGQWgPUAfjDGTIleaamsnxeAoQDuAlAUpSKSjwh8ZgbA9yIyXUSuiVY5yVHGz6wpgA0A3vQ0y78uIlWjWFxCRP6dWRcCeD/S5aPwJEWQJSJZAD4BMMgYs7009zDGHDLGdABQAKCLiLSJZBnJUdbPS0R6A1hvjJke8cKRX5H4NwbgWGNMRwCnA7hBRHpErIBUTAQ+s3QAHQG8bIw5EsAuAIMjWETyEaF/Z/A07Z4N4KNIlY1KJ+GDLE8fqk8A/H979/Pq2RzHcfz5xtAwV7MwRUmTjZqUW8qUoaYhsaArZiE/ZizIHzApY6OJ7GwkSnIXaBqTyTQbCxJbpjQaioi54Y78uGHKxsvifOTbNGHqnK977vf52Hy/nXO+p/enT6fvq8/nc855NckbbfNym+P+a6775H89XxsOfxe4tedSRW/9tQ24o63x2Q/sqKpXBip55vV1jSX5pn2eBA4B1w1TsXrqsyVgaWJU/yBd6NIAev4vuw04mmS5/0p1NkYdstqC9ZeAT5I8M7HrMLCrfd8FvPkv59lUVRvb9/XAzcCn/Vc82/rqrySPJbk8yWa6IfF3ktw3QMkzr8dr7KK2oJc25XQL8HH/FavH6+w74ERVXdU23QQc77lc0V+fTbgHpwpXhbHfXXgD8D5wjL/X5uylm8s+AFwBfA3sTPJjVV0KfABc3I7/FdgCbKZbVHguXfA8kGTf9FoyG/rqr8lh9KraDuzx7sJh9HiNXUI3egXdNNRrSZ6aVjtmSZ/XWVXN091ccj7wBfBgkp+m2Z5Z0HOfXQicAK5MsjLdluh0ow5ZkiRJq9WopwslSZJWK0OWJEnSAAxZkiRJAzBkSZIkDcCQJUmSNABDlqRRq6onqmrPP+xfqKot06xJksCQJWntW6B7VpckTZXPyZI0OlX1OPAA3UMXvwc+BFaAh+kenPk5cD8wDxxp+1aAu9opngM2AaeAh5L4hgdJvTNkSRqVqroWWAS20j09/ijwAvBykh/aMU8Cy0merapF4EiSg23f28AjST6rqq3A00l2TL8lkta68/7vAiTpLN0IHEpyCqCqDrftV7dwtRHYALx1+g+ragNwPfB697o4AC4YvGJJM8mQJWmMzjQEvwgsJPmoqnYD289wzDnAz0nmhytNkjoufJc0Nu8Bd1bV+qqaA25v2+eAb6tqHXDvxPG/tH20l4t/WVU7AapzzfRKlzRLXJMlaXQmFr5/BSwBx4HfgEfbtmPAXJLdVbUNeBH4Hbgb+AN4HrgMWAfsT7Jv6o2QtOYZsiRJkgbgdKEkSdIADFmSJEkDMGRJkiQNwJAlSZI0AEOWJEnSAAxZkiRJAzBkSZIkDcCQJUmSNIA/Ad9+93ISsVcMAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(10,5))\n",
    "oil.plot.line(x=\"date\", y=\"dcoilwtico\", color=\"b\", ax=axes, rot=0)\n",
    "plt.title(\"Dependency of the oil from the data\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4.特征整合"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>date</th>\n",
       "      <th>store_nbr</th>\n",
       "      <th>family</th>\n",
       "      <th>sales</th>\n",
       "      <th>onpromotion</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>AUTOMOTIVE</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>BABY CARE</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>BEAUTY</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>BEVERAGES</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>BOOKS</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id       date  store_nbr      family  sales  onpromotion\n",
       "0   0 2013-01-01          1  AUTOMOTIVE    0.0            0\n",
       "1   1 2013-01-01          1   BABY CARE    0.0            0\n",
       "2   2 2013-01-01          1      BEAUTY    0.0            0\n",
       "3   3 2013-01-01          1   BEVERAGES    0.0            0\n",
       "4   4 2013-01-01          1       BOOKS    0.0            0"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>date</th>\n",
       "      <th>store_nbr</th>\n",
       "      <th>family</th>\n",
       "      <th>sales</th>\n",
       "      <th>onpromotion</th>\n",
       "      <th>type</th>\n",
       "      <th>locale</th>\n",
       "      <th>locale_name</th>\n",
       "      <th>description</th>\n",
       "      <th>transferred</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>AUTOMOTIVE</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>National</td>\n",
       "      <td>Ecuador</td>\n",
       "      <td>Primer dia del ano</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>BABY CARE</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>National</td>\n",
       "      <td>Ecuador</td>\n",
       "      <td>Primer dia del ano</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>BEAUTY</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>National</td>\n",
       "      <td>Ecuador</td>\n",
       "      <td>Primer dia del ano</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>BEVERAGES</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>National</td>\n",
       "      <td>Ecuador</td>\n",
       "      <td>Primer dia del ano</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>BOOKS</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>National</td>\n",
       "      <td>Ecuador</td>\n",
       "      <td>Primer dia del ano</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id       date  store_nbr      family  sales  onpromotion     type  \\\n",
       "0   0 2013-01-01          1  AUTOMOTIVE    0.0            0  Holiday   \n",
       "1   1 2013-01-01          1   BABY CARE    0.0            0  Holiday   \n",
       "2   2 2013-01-01          1      BEAUTY    0.0            0  Holiday   \n",
       "3   3 2013-01-01          1   BEVERAGES    0.0            0  Holiday   \n",
       "4   4 2013-01-01          1       BOOKS    0.0            0  Holiday   \n",
       "\n",
       "     locale locale_name         description transferred  \n",
       "0  National     Ecuador  Primer dia del ano       False  \n",
       "1  National     Ecuador  Primer dia del ano       False  \n",
       "2  National     Ecuador  Primer dia del ano       False  \n",
       "3  National     Ecuador  Primer dia del ano       False  \n",
       "4  National     Ecuador  Primer dia del ano       False  "
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = train.merge(holidays, on = 'date', how = 'left')\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>date</th>\n",
       "      <th>store_nbr</th>\n",
       "      <th>family</th>\n",
       "      <th>sales</th>\n",
       "      <th>onpromotion</th>\n",
       "      <th>type</th>\n",
       "      <th>locale</th>\n",
       "      <th>locale_name</th>\n",
       "      <th>description</th>\n",
       "      <th>transferred</th>\n",
       "      <th>dcoilwtico</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>AUTOMOTIVE</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>National</td>\n",
       "      <td>Ecuador</td>\n",
       "      <td>Primer dia del ano</td>\n",
       "      <td>False</td>\n",
       "      <td>93.14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>BABY CARE</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>National</td>\n",
       "      <td>Ecuador</td>\n",
       "      <td>Primer dia del ano</td>\n",
       "      <td>False</td>\n",
       "      <td>93.14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>BEAUTY</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>National</td>\n",
       "      <td>Ecuador</td>\n",
       "      <td>Primer dia del ano</td>\n",
       "      <td>False</td>\n",
       "      <td>93.14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>BEVERAGES</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>National</td>\n",
       "      <td>Ecuador</td>\n",
       "      <td>Primer dia del ano</td>\n",
       "      <td>False</td>\n",
       "      <td>93.14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>BOOKS</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>National</td>\n",
       "      <td>Ecuador</td>\n",
       "      <td>Primer dia del ano</td>\n",
       "      <td>False</td>\n",
       "      <td>93.14</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id       date  store_nbr      family  sales  onpromotion     type  \\\n",
       "0   0 2013-01-01          1  AUTOMOTIVE    0.0            0  Holiday   \n",
       "1   1 2013-01-01          1   BABY CARE    0.0            0  Holiday   \n",
       "2   2 2013-01-01          1      BEAUTY    0.0            0  Holiday   \n",
       "3   3 2013-01-01          1   BEVERAGES    0.0            0  Holiday   \n",
       "4   4 2013-01-01          1       BOOKS    0.0            0  Holiday   \n",
       "\n",
       "     locale locale_name         description transferred  dcoilwtico  \n",
       "0  National     Ecuador  Primer dia del ano       False       93.14  \n",
       "1  National     Ecuador  Primer dia del ano       False       93.14  \n",
       "2  National     Ecuador  Primer dia del ano       False       93.14  \n",
       "3  National     Ecuador  Primer dia del ano       False       93.14  \n",
       "4  National     Ecuador  Primer dia del ano       False       93.14  "
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = df.merge(oil, on = 'date', how = 'left')\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>date</th>\n",
       "      <th>store_nbr</th>\n",
       "      <th>family</th>\n",
       "      <th>sales</th>\n",
       "      <th>onpromotion</th>\n",
       "      <th>type_x</th>\n",
       "      <th>locale</th>\n",
       "      <th>locale_name</th>\n",
       "      <th>description</th>\n",
       "      <th>transferred</th>\n",
       "      <th>dcoilwtico</th>\n",
       "      <th>city</th>\n",
       "      <th>state</th>\n",
       "      <th>type_y</th>\n",
       "      <th>cluster</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>AUTOMOTIVE</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>National</td>\n",
       "      <td>Ecuador</td>\n",
       "      <td>Primer dia del ano</td>\n",
       "      <td>False</td>\n",
       "      <td>93.14</td>\n",
       "      <td>Quito</td>\n",
       "      <td>Pichincha</td>\n",
       "      <td>D</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>BABY CARE</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>National</td>\n",
       "      <td>Ecuador</td>\n",
       "      <td>Primer dia del ano</td>\n",
       "      <td>False</td>\n",
       "      <td>93.14</td>\n",
       "      <td>Quito</td>\n",
       "      <td>Pichincha</td>\n",
       "      <td>D</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>BEAUTY</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>National</td>\n",
       "      <td>Ecuador</td>\n",
       "      <td>Primer dia del ano</td>\n",
       "      <td>False</td>\n",
       "      <td>93.14</td>\n",
       "      <td>Quito</td>\n",
       "      <td>Pichincha</td>\n",
       "      <td>D</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>BEVERAGES</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>National</td>\n",
       "      <td>Ecuador</td>\n",
       "      <td>Primer dia del ano</td>\n",
       "      <td>False</td>\n",
       "      <td>93.14</td>\n",
       "      <td>Quito</td>\n",
       "      <td>Pichincha</td>\n",
       "      <td>D</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>BOOKS</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>National</td>\n",
       "      <td>Ecuador</td>\n",
       "      <td>Primer dia del ano</td>\n",
       "      <td>False</td>\n",
       "      <td>93.14</td>\n",
       "      <td>Quito</td>\n",
       "      <td>Pichincha</td>\n",
       "      <td>D</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id       date  store_nbr      family  sales  onpromotion   type_x  \\\n",
       "0   0 2013-01-01          1  AUTOMOTIVE    0.0            0  Holiday   \n",
       "1   1 2013-01-01          1   BABY CARE    0.0            0  Holiday   \n",
       "2   2 2013-01-01          1      BEAUTY    0.0            0  Holiday   \n",
       "3   3 2013-01-01          1   BEVERAGES    0.0            0  Holiday   \n",
       "4   4 2013-01-01          1       BOOKS    0.0            0  Holiday   \n",
       "\n",
       "     locale locale_name         description transferred  dcoilwtico   city  \\\n",
       "0  National     Ecuador  Primer dia del ano       False       93.14  Quito   \n",
       "1  National     Ecuador  Primer dia del ano       False       93.14  Quito   \n",
       "2  National     Ecuador  Primer dia del ano       False       93.14  Quito   \n",
       "3  National     Ecuador  Primer dia del ano       False       93.14  Quito   \n",
       "4  National     Ecuador  Primer dia del ano       False       93.14  Quito   \n",
       "\n",
       "       state type_y  cluster  \n",
       "0  Pichincha      D       13  \n",
       "1  Pichincha      D       13  \n",
       "2  Pichincha      D       13  \n",
       "3  Pichincha      D       13  \n",
       "4  Pichincha      D       13  "
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = df.merge(stores, on = 'store_nbr', how = 'left')\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>date</th>\n",
       "      <th>store_nbr</th>\n",
       "      <th>family</th>\n",
       "      <th>sales</th>\n",
       "      <th>onpromotion</th>\n",
       "      <th>type_x</th>\n",
       "      <th>locale</th>\n",
       "      <th>locale_name</th>\n",
       "      <th>description</th>\n",
       "      <th>transferred</th>\n",
       "      <th>dcoilwtico</th>\n",
       "      <th>city</th>\n",
       "      <th>state</th>\n",
       "      <th>type_y</th>\n",
       "      <th>cluster</th>\n",
       "      <th>transactions</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>AUTOMOTIVE</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>National</td>\n",
       "      <td>Ecuador</td>\n",
       "      <td>Primer dia del ano</td>\n",
       "      <td>False</td>\n",
       "      <td>93.14</td>\n",
       "      <td>Quito</td>\n",
       "      <td>Pichincha</td>\n",
       "      <td>D</td>\n",
       "      <td>13</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>BABY CARE</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>National</td>\n",
       "      <td>Ecuador</td>\n",
       "      <td>Primer dia del ano</td>\n",
       "      <td>False</td>\n",
       "      <td>93.14</td>\n",
       "      <td>Quito</td>\n",
       "      <td>Pichincha</td>\n",
       "      <td>D</td>\n",
       "      <td>13</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>BEAUTY</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>National</td>\n",
       "      <td>Ecuador</td>\n",
       "      <td>Primer dia del ano</td>\n",
       "      <td>False</td>\n",
       "      <td>93.14</td>\n",
       "      <td>Quito</td>\n",
       "      <td>Pichincha</td>\n",
       "      <td>D</td>\n",
       "      <td>13</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>BEVERAGES</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>National</td>\n",
       "      <td>Ecuador</td>\n",
       "      <td>Primer dia del ano</td>\n",
       "      <td>False</td>\n",
       "      <td>93.14</td>\n",
       "      <td>Quito</td>\n",
       "      <td>Pichincha</td>\n",
       "      <td>D</td>\n",
       "      <td>13</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>BOOKS</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>National</td>\n",
       "      <td>Ecuador</td>\n",
       "      <td>Primer dia del ano</td>\n",
       "      <td>False</td>\n",
       "      <td>93.14</td>\n",
       "      <td>Quito</td>\n",
       "      <td>Pichincha</td>\n",
       "      <td>D</td>\n",
       "      <td>13</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id       date  store_nbr      family  sales  onpromotion   type_x  \\\n",
       "0   0 2013-01-01          1  AUTOMOTIVE    0.0            0  Holiday   \n",
       "1   1 2013-01-01          1   BABY CARE    0.0            0  Holiday   \n",
       "2   2 2013-01-01          1      BEAUTY    0.0            0  Holiday   \n",
       "3   3 2013-01-01          1   BEVERAGES    0.0            0  Holiday   \n",
       "4   4 2013-01-01          1       BOOKS    0.0            0  Holiday   \n",
       "\n",
       "     locale locale_name         description transferred  dcoilwtico   city  \\\n",
       "0  National     Ecuador  Primer dia del ano       False       93.14  Quito   \n",
       "1  National     Ecuador  Primer dia del ano       False       93.14  Quito   \n",
       "2  National     Ecuador  Primer dia del ano       False       93.14  Quito   \n",
       "3  National     Ecuador  Primer dia del ano       False       93.14  Quito   \n",
       "4  National     Ecuador  Primer dia del ano       False       93.14  Quito   \n",
       "\n",
       "       state type_y  cluster  transactions  \n",
       "0  Pichincha      D       13           NaN  \n",
       "1  Pichincha      D       13           NaN  \n",
       "2  Pichincha      D       13           NaN  \n",
       "3  Pichincha      D       13           NaN  \n",
       "4  Pichincha      D       13           NaN  "
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = df.merge(transactions, on = ['date', 'store_nbr'], how = 'left')\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>date</th>\n",
       "      <th>store_nbr</th>\n",
       "      <th>family</th>\n",
       "      <th>sales</th>\n",
       "      <th>onpromotion</th>\n",
       "      <th>holiday_type</th>\n",
       "      <th>locale</th>\n",
       "      <th>locale_name</th>\n",
       "      <th>description</th>\n",
       "      <th>transferred</th>\n",
       "      <th>dcoilwtico</th>\n",
       "      <th>city</th>\n",
       "      <th>state</th>\n",
       "      <th>store_type</th>\n",
       "      <th>cluster</th>\n",
       "      <th>transactions</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>AUTOMOTIVE</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>National</td>\n",
       "      <td>Ecuador</td>\n",
       "      <td>Primer dia del ano</td>\n",
       "      <td>False</td>\n",
       "      <td>93.14</td>\n",
       "      <td>Quito</td>\n",
       "      <td>Pichincha</td>\n",
       "      <td>D</td>\n",
       "      <td>13</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>BABY CARE</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>National</td>\n",
       "      <td>Ecuador</td>\n",
       "      <td>Primer dia del ano</td>\n",
       "      <td>False</td>\n",
       "      <td>93.14</td>\n",
       "      <td>Quito</td>\n",
       "      <td>Pichincha</td>\n",
       "      <td>D</td>\n",
       "      <td>13</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>BEAUTY</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>National</td>\n",
       "      <td>Ecuador</td>\n",
       "      <td>Primer dia del ano</td>\n",
       "      <td>False</td>\n",
       "      <td>93.14</td>\n",
       "      <td>Quito</td>\n",
       "      <td>Pichincha</td>\n",
       "      <td>D</td>\n",
       "      <td>13</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>BEVERAGES</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>National</td>\n",
       "      <td>Ecuador</td>\n",
       "      <td>Primer dia del ano</td>\n",
       "      <td>False</td>\n",
       "      <td>93.14</td>\n",
       "      <td>Quito</td>\n",
       "      <td>Pichincha</td>\n",
       "      <td>D</td>\n",
       "      <td>13</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>BOOKS</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>National</td>\n",
       "      <td>Ecuador</td>\n",
       "      <td>Primer dia del ano</td>\n",
       "      <td>False</td>\n",
       "      <td>93.14</td>\n",
       "      <td>Quito</td>\n",
       "      <td>Pichincha</td>\n",
       "      <td>D</td>\n",
       "      <td>13</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id       date  store_nbr      family  sales  onpromotion holiday_type  \\\n",
       "0   0 2013-01-01          1  AUTOMOTIVE    0.0            0      Holiday   \n",
       "1   1 2013-01-01          1   BABY CARE    0.0            0      Holiday   \n",
       "2   2 2013-01-01          1      BEAUTY    0.0            0      Holiday   \n",
       "3   3 2013-01-01          1   BEVERAGES    0.0            0      Holiday   \n",
       "4   4 2013-01-01          1       BOOKS    0.0            0      Holiday   \n",
       "\n",
       "     locale locale_name         description transferred  dcoilwtico   city  \\\n",
       "0  National     Ecuador  Primer dia del ano       False       93.14  Quito   \n",
       "1  National     Ecuador  Primer dia del ano       False       93.14  Quito   \n",
       "2  National     Ecuador  Primer dia del ano       False       93.14  Quito   \n",
       "3  National     Ecuador  Primer dia del ano       False       93.14  Quito   \n",
       "4  National     Ecuador  Primer dia del ano       False       93.14  Quito   \n",
       "\n",
       "       state store_type  cluster  transactions  \n",
       "0  Pichincha          D       13           NaN  \n",
       "1  Pichincha          D       13           NaN  \n",
       "2  Pichincha          D       13           NaN  \n",
       "3  Pichincha          D       13           NaN  \n",
       "4  Pichincha          D       13           NaN  "
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = df.rename(columns = {'type_x' : \"holiday_type\", \"type_y\" : \"store_type\"})\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "df['holiday_type'] = df['holiday_type'].replace({np.nan : \"Normal\"})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>date</th>\n",
       "      <th>store_nbr</th>\n",
       "      <th>sales</th>\n",
       "      <th>onpromotion</th>\n",
       "      <th>holiday_type</th>\n",
       "      <th>dcoilwtico</th>\n",
       "      <th>transactions</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>561</th>\n",
       "      <td>561</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>25</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>93.14</td>\n",
       "      <td>770.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>562</th>\n",
       "      <td>562</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>25</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>93.14</td>\n",
       "      <td>770.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>563</th>\n",
       "      <td>563</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>25</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>93.14</td>\n",
       "      <td>770.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>564</th>\n",
       "      <td>564</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>25</td>\n",
       "      <td>810.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>93.14</td>\n",
       "      <td>770.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>565</th>\n",
       "      <td>565</td>\n",
       "      <td>2013-01-01</td>\n",
       "      <td>25</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>Holiday</td>\n",
       "      <td>93.14</td>\n",
       "      <td>770.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      id       date  store_nbr  sales  onpromotion holiday_type  dcoilwtico  \\\n",
       "561  561 2013-01-01         25    0.0            0      Holiday       93.14   \n",
       "562  562 2013-01-01         25    0.0            0      Holiday       93.14   \n",
       "563  563 2013-01-01         25    2.0            0      Holiday       93.14   \n",
       "564  564 2013-01-01         25  810.0            0      Holiday       93.14   \n",
       "565  565 2013-01-01         25    0.0            0      Holiday       93.14   \n",
       "\n",
       "     transactions  \n",
       "561         770.0  \n",
       "562         770.0  \n",
       "563         770.0  \n",
       "564         770.0  \n",
       "565         770.0  "
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = df[df[\"transactions\"].isnull() == False]  #删除空的行\n",
    "df[\"dcoilwtico\"] = df[\"dcoilwtico\"].fillna(method = 'bfill')\n",
    "\n",
    "# 删除不需要的数据\n",
    "df = df.drop(['locale_name', \"description\", \"transferred\"], axis = 1)\n",
    "df = df.drop(['locale', 'family', 'city', 'state', 'cluster', 'store_type'], axis = 1)\n",
    "\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
